package main

import "fmt"

// 常量定义
// 定义了常后不能修改
// 在程序运行中间不会改
const pi = 3.115926

// 批量声明常量
const (
	httpStatusOk       = 200
	httpStatusNotFound = 404
)

// 批量声明常量时，如果某一行声明后没有赋值，默认就和上一行一样
const (
	n1 = 100
	n2
	n3
)

// iota 常量计数器
// 类似枚举
const (
	s1 = iota // 0
	s2        // 1
	s3        // 2
	s4        // 3
)

const (
	c1 = iota
	c2 = 100
	c3 = iota
	c4
)

const (
	// iota = 0
	d1, d2 = iota + 1, iota + 2 // 1 2
	// iota = 1
	d3, d4 = iota + 3, iota + 4 // 4 5
)
const (
	_ = iota
	// KB 1024 1 向左移 10位
	KB = 1 << (10 * iota)
	// MB 1024 * 1024 1 向左移 20位
	MB = 1 << (10 * iota)
	// GB 1024 * 1024 * 1024 1 向左移 30位
	GB = 1 << (10 * iota)
	// TB 1024 * 1024 * 1024 * 1024 1 向左移 40位
	TB = 1 << (10 * iota)
	// PB 1024 * 1024 * 1024 * 1024 * 1024 1 向左移 50位
	PB = 1 << (10 * iota)
)

func main() {
	fmt.Println(pi)
	fmt.Println(httpStatusOk)
	fmt.Println(n1)
	fmt.Println(n2)
	fmt.Println(n3)
	fmt.Println("iota 使用")
	fmt.Println(s1)
	fmt.Println(s2)
	fmt.Println(s3)
	fmt.Println(s4)
	fmt.Println("iota 插队使用")
	fmt.Println("c1:", c1)
	fmt.Println("c2:", c2)
	fmt.Println("c3:", c3)
	fmt.Println("c4:", c4)
	fmt.Println("iota 使用")
	fmt.Println("d1:", d1)
	fmt.Println("d2:", d2)
	fmt.Println("d3:", d3)
	fmt.Println("d4:", d4)
	fmt.Println("iota 位运算")
	fmt.Println("KB:", KB)
	fmt.Println("MB:", MB)
	fmt.Println("GB:", GB)
	fmt.Println("TB:", TB)
	fmt.Println("PB:", PB)
}
